from unittest import mock
from django.db import transaction
from django.test import SimpleTestCase, TestCase, TransactionTestCase
from apps.vadmin.assets.models.categories import Categories

# TestCase 会自动创建和使用数据库,并且是事务自动回滚的
# TransactionTestCase 结束后自动清空库，flush db
#
# python3 manage.py test assets.tests.MyTestCase.test_save_data 执行特定的方法,会创建临时数据库，结束后销毁临时数据库
# python3 manage.py test assets.tests.MyTestCase.test_save_data --keepdb 一直保留测试数据库，通常是已配置的数据库名前加test_
# TestCase会为每个测试方法创建一个临时的测试数据库，这是为了确保测试之间的隔离性。
class MyTestCase(TransactionTestCase):
    def test_save_data(self):
        # self._disable_auto_rollback()
        print("test_save_data...")
        # 禁用自动回滚
        with transaction.atomic():
            instance = Categories.objects.create(name="通用资产2", category_type="asset")
            # 提交事务，如果不提交事务，数据库更改将不会生效   
            transaction.set_autocommit(True)
            # transaction.commit()


    def test_update(self):
        ins = Categories.objects.get(id=1)
        ins.name = "通用资产"
        ins.save()
        nd = Categories.objects.all();
        print(nd)
        print("test_2...")

    # 模拟数据库操作
    # @mock.patch()
    # def test_3():
        # print("test_3")

# TransactionTestCase 或 SimpleTestCase 会跳过数据库操作
# 
# python3 manage.py test myapp.tests.MyTestCase2.test_2 执行特定的方法
class MyTestCase2(SimpleTestCase):
    def test_2(self):
        print("test_2...")